$(function(){
    // 购物车的初始化
    function init () {
        $('.singleCheck').each(function(i, item){
            let sprice = parseFloat($(item).parents('td').siblings('.sprice').html());
            let num = parseInt($(item).parents('td').siblings('td').children('.num').val());
            $(item).parents('td').siblings('.sum').html((sprice * num).toFixed(2))
        })
    }
    init();

    // 1. 全选和反选
    // 全选： 实现思路：
    // 1. 给全选按钮绑定点击事件
    $('.allCheck').on('click', function(){
        // 2. 获取全选按钮的选中状态
        let allStatus = $(this).prop('checked');
        // 3. 将全选的选中状态给到所有商品的选中状态
        $('.singleCheck').prop('checked', allStatus);
        // 4. 将全选的选中状态给到另一个全选按钮
        $('.allCheck').prop('checked', allStatus);
        // 商品数量和总计
        // 只计算选中的商品 
        getTotal();

    })

    
    // 反选： 只有所有商品都选中了 才将全选的按钮选中 否则就去取消选中
    //  1. 给所有的商品复选框绑定点击事件
    $('.singleCheck').on('click', function(){
        let flag = true;
        // 2. 获取所有商品的选中状态
        $('.singleCheck').each(function(i, item){
            // 这里的item是一个原生js对象
            let singleCheckedStatus = $(item).prop('checked');
            // 3. 判断是否有未选中的商品 有就不全选 否则全选
            if(!singleCheckedStatus) {
                flag = false;
                return; // 只要判断出有一个未选中 就可以终止循环执行 提高了代码执行效率
            }
        })
        $('.allCheck').prop('checked', flag);
        // 商品数量和总计
        // 只计算选中的商品 
        getTotal();
    })


    // 加法
    // 1. 给加法按钮绑定点击事件
    $('.add').on('click', function(){
        // 将减法按钮的鼠标变成手指 表示可点击状态
        $('.minus').css({
            cursor: 'pointer'
        })
        let num = $(this).siblings('.num').val();
        num++;
        $(this).siblings('.num').val(num);
        // 小计
        getSum($(this), num);
        // 商品数量和总计
        // 只计算选中的商品 
        getTotal();
    })


    // 减法
    // 1. 给减法按钮绑定点击事件
    $('.minus').on('click', function(){
        let num = $(this).siblings('.num').val();
        // 当商品只有一件时，不能继续点击减法按钮
        if(num == 1) {
            $(this).css({
                cursor: 'not-allowed'
            })
            return;
        }
        num--;
        $(this).siblings('.num').val(num);
        // 小计
        getSum($(this), num)
        // 商品数量和总计
        // 只计算选中的商品 
        getTotal();
    })

    // 小计的封装函数
    function getSum(obj, num) {
        let singlePrice = obj.parents('td').siblings('.sprice').html();
        let sum = (num * singlePrice).toFixed(2);
        obj.parents('td').siblings('.sum').html(sum);
    }

    // 当数量发生改变修改小计
    $('.num').on('change', function(){
        if($(this).val() < 1) {
            $(this).val(1)
        }
        // 小计
        getSum($(this), $(this).val())
        // 商品数量和总计
        // 只计算选中的商品 
        getTotal();
    })

    // 计算总量和总价   
    function getTotal () {
        let total = 0;
        let totalPrice = 0;
        $('.singleCheck:checked').each(function(i, item) {
            // 总量
            total += parseInt($(item).parents('td').siblings('td').children('.num').val());
            // 总价
            totalPrice += parseFloat($(item).parents('td').siblings('.sum').html())
        }) 
        $('.total').html(total);
        $('.totalprice').html(totalPrice.toFixed(2));
    }
        
})